using FastDevTemplate.DataAccess.Entities;
using FastDevTemplate.Service.Interface.Base;
using FastDevTemplate.Service.Interface.DTO;

namespace FastDevTemplate.Service.Interface;

public interface IUserService : IAuditCurdService<
    User,
    Guid,
    UserResultDto,
    UserGetResultDto,
    UserAddDto,
    UserUpdateDto>
{
    public Task<UserGetResultDto?> GetByUserNameAsync(string userName);
    
    public Task<UserLoginDto?> LoginAsync(string username, string password);
    
    public Task<int> UpdatePasswordAsync(Guid userId, UserUpdatePasswordDto userUpdatePasswordDto);

    public Task<ICollection<RoleResultDto>> GetRolesByUserIDAsync(Guid userId);
    
    public Task<int> SetRoleAsync(Guid id, params string[] roleKey);

    public Task<int> AddRoleListAsync(Guid userId, params string[] roleKeys);

    public Task<int> RemoveRoleListAsync(Guid userId, params string[] roleKeys);
    
}